package com.dpteam.dao;

import com.dpteam.model.ImportProduct;
import com.dpteam.util.Page;

import java.time.LocalDate;
import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * User: luolei
 * Date: 2016/1/7
 * Time: 16:50
 */
public interface ImportProductDao extends BaseDao<ImportProduct> {

    /**
     * 通过理货员ID查询入库记录
     * @param userId
     * @return
     */
    List<ImportProduct> findByUserId(int userId);

    /**
     * 通过理货员ID查询入库记录（分页）
     * @param userId
     * @param page
     * @return
     */
    List<ImportProduct> findByUserIdByPage(int userId, Page page);

    /**
     * 通过商品ID查询入库记录
     * @param productId
     * @return
     */
    List<ImportProduct> findByProductId(int productId);

    /**
     * 通过商品ID查询入库记录（分页）
     * @param productId
     * @param page
     * @return
     */
    List<ImportProduct> findByProductIdByPage(int productId, Page page);

    /**
     * 查询全部入库记录
     * @return
     */
    List<ImportProduct> findAll();

    /**
     * 查询全部入库记录（分页）
     * @param page
     * @return
     */
    List<ImportProduct> findAllByPage(Page page);

    /**
     * 根据年份查询入库记录
     * @param year
     * @return
     */
    List<ImportProduct> findByYear(int year);

    /**
     * 根据年份查询入库记录(分页)
     * @param year
     * @param page
     * @return
     */
    List<ImportProduct> findByYearByPage(int year, Page page);

    /**
     * 查询当年指定月份的入库记录
     * @param month
     * @return
     */
    List<ImportProduct> findByMonth(int month);

    /**
     * 查询当年指定月份的入库记录（分页）
     * @param month
     * @param page
     * @return
     */
    List<ImportProduct> findByMonthByPage(int month, Page page);

    /**
     * 查询指定年份和月份的入库记录
     * @param year
     * @param month
     * @return
     */
    List<ImportProduct> findByYearAndMonth(int year, int month);

    /**
     * 查询指定年份和月份的入库记录（分页）
     * @param year
     * @param month
     * @param page
     * @return
     */
    List<ImportProduct> findByYearAndMonthByPage(int year, int month, Page page);

    /**
     * 查找两个指定日期间的入库记录
     * @param begin
     * @param end
     * @return
     */
    List<ImportProduct> findBetween(LocalDate begin, LocalDate end);

    /**
     * 查找两个指定日期间的入库记录（分页）
     * @param begin
     * @param end
     * @param page
     * @return
     */
    List<ImportProduct> findBetweenByPage(LocalDate begin, LocalDate end, Page page);

    /**
     * 根据ID删除
     * @param id
     */
    void deleteById(int id);

    /**
     * 批量添加
     * @param list
     */
    void batchInsert(List<ImportProduct> list);

    int countAmount(int year);

    int countAmount(int year, int month);

    int countAmount(int year, int month, int categoryId);

    double countCost(int year);

    double countCost(int year, int month);

    double countCost(int year, int month, int categoryId);

}
